// =============================1.string类型===================================
// 定义类型不赋值
var userName;
// userName = 123//不能将类型“number”分配给类型“string”。
// 定义类型并赋值
var userHopy = "篮球";
// userHopy = true//不能将类型“boolean”分配给类型“string”。
//定义变量并赋值（TS类型自动推断）
var userSex = "男";
// userSex = {}//不能将类型“{}”分配给类型“string”。
// ============================2.number类型=====================================
var userAge = 20;
// userAge = {}//不能将类型“{}”分配给类型“number”。
var subjectNumber = 1000;
// ============================3.bool类型=======================================
var isShow;
isShow = true;
// isShow = 123//不能将类型“number”分配给类型“boolean”。
// =============================4.字面量类型=====================================
// 变量的值必须和自定义变量类型值一致
// 也可以使用字面量去指定变量的类型，通过字面量可以确定变量的取值范围
// 定义字面量类型
var subName;
// subName = 123//不能将类型“123”分配给类型“"web"”。
subName = "web";
// 字面量配合联合类型('|')使用
var color;
color = "green";
color = "blue";
//=================================5.any 任何类型 没有类型校验====================
// 如果变量声明了但是没有设置类型和赋值 默认类型就是any
var p1;
p1 = 123;
p1 = "你好";
p1 = {};
p1 = [1, 2, 3];
// 可以将any类型的数据直接赋值给其他变量 不够安全
var p2 = 123;
p2 = p1;
console.log('p2:', p2);
// ====================6.unknown 未知类型 安全的any类型===========================
//不能将类型“unknown”随意分配给其他类型。
var p3;
p3 = 123;
p3 = [];
var p4 = 123;
// p4 = p3//不能将类型“unknown”分配给类型“number”。
// 可以通过类型断言赋值给其他变量
p4 = p3; //当p3是number类型的时候赋值给p4
p4 = p3; //当p3是number类型的时候赋值给p4
// ==============7.void 空值(undefined) 没有任何类型 常用于没有返回值的方法=========
var p5;
// p5 = 123//不能将类型“number”分配给类型“void”。
p5 = undefined;
// p5 = null//不能将类型“null”分配给类型“void”。
// void可以用于函数的返回值 表示没有返回值结果
function getUser() {
    console.log(111);
}
getUser();
// ===========================8.never 永远不会有值的一种类型=======================
//不能将类型“undefined”分配给类型“never”。
var p6;
// p6 = undefined//不能将类型“undefined”分配给类型“never”。
// 一个从来不会有返回值的函数,即死循环
function xunhuan() {
    while (true) { }
}
// 一个总是会抛出错误的函数
function getError() {
    throw new Error('我是错误信息');
}
// never 和 void 的差异
// void 表示没有任何类型，never 表示永远不存在的值的类型。
// 返回never的函数必须存在无法达到的终点
// ===========================9.object 语法：object | {}==========================
var p7;
// p7 = 123//不能将类型“number”分配给类型“object”。
p7 = { id: 11, name: "李四" };
var p8;
p8 = { hopy: "篮球" };
var p9;
p9 = { sex: "女", age: 20, work: "it" };
// =========================10.array 语法：类型[] | Array<类型>====================
var p10;
p10 = [1, 2, 3, 4];
var p11;
p11 = ['1', '2', '3'];
var p12;
p12 = [1, 2];
var p13;
// ===============11.元组tuple 固定长度的数组 语法：[类型，类型.....]================
var p14;
p14 = ['12', 34, {}];
// ===================12.枚举类型 语法：enum value{v1,v2}==========================
// 联合类型写法 不清楚 数字具体是什么意思？
var orderStatus;
orderStatus = 1;

var statusCode;
(function (statusCode) {
    statusCode[statusCode["\u6210\u529F"] = 200] = "\u6210\u529F";
    statusCode[statusCode["\u5931\u8D25"] = 500] = "\u5931\u8D25";
    statusCode[statusCode["\u8BF7\u6C42\u4E2D"] = 100] = "\u8BF7\u6C42\u4E2D"; //2
})(statusCode || (statusCode = {}));

var code;
code = statusCode.失败;
console.log(code);

   
                   